package com.geek.javase.ch18.videodemo.annotation;

/*
 *@Date 2025/11/6
 *@Author wangpeng
 *@Description TODO
 */

/* * Annotation注解 + 属性
 *  * 1.如何声明带有属性的注解？
 *  *      语法：
 *  *      @interface 注解名{
 *  *          数据类型 属性名();
 *  *          数据类型 属性名() default 默认值;
 *  *          属性类型 value();
 *  *          数据类型[] 属性名();
 *  *      }
 *  *      注意：
 *  *      1）、八大基本数据类型：byte short int long float double char boolean
 *  *      2）、引用数据类型  类似于String的API、Class、注解类型、枚举等
 *  *      3）、以上所有数据类型的数组形式
 *  *
 *  * 2.如何使用？
 *  *      语法：@注解名(属性名1=值1 , 属性名2=值2 , ....) 类似于@Test(timeout=1000L)
 *  *      注意：若属性值，存在default默认值，可以不写
 *  * 3.注意：
 *  *      - 情况1：
 *  *      @interface MyManager{
 *  *          String value();
 *  *      }
 *  *      使用时，可以省略value不写，直接赋值即可，类似于@MyManager("经理")
 *  *
 *  *      - 情况2：
 *  *      @interface MyManager{
 *  *          String value();
 *  *          int age();
 *  *      }
 *  *      使用时，value必须添加上，类似于@MyManager(value = "经理", age = 20)
 *  *
 *  *      - 情况3：
 *  *      @interface MyManager{
 *  *          String value();
 *  *          int age() default 18;
 *  *      }
 *  *      使用时，若出现其他属性有默认值的情况，则可以省略value不写，类似于@MyManager("经理")
 *  *
 *  * 4.典型代表：@Test、@Autowired等
 */
@MyEmp(name = "张三", salary = 10000, titles = {"java", "c++", "python"})
public class AnnotationDemo2 {
    @MyEmp(name = "李四", age = 20, salary = 10000, titles = {"java"})
    private String username;

    @MyManager("经理")
    public void eat(){

    }
}
//自定义注解+属性
@interface  MyEmp{
    String name();
    int age() default 18;
    double salary();
    String[] titles();
}

@interface MyManager{
    String value();
    int age() default 18;
}
